#include <iostream>
#include <vector>
#include <queue>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <functional> // For std::function
#include "task.h"

/*==============================<线程池类>==============================*/
class ThreadPool
{
private:
    std::vector<std::thread> workers; // 存储工作线程
    std::queue<Task*> tasks;         // 任务队列 (存储 Task* 指针)

    std::mutex queue_mutex;              // 互斥量，保护任务队列
    std::condition_variable condition;   // 条件变量，用于线程等待和通知

    bool stop; // 标记，用于通知线程池停止

public:
    ThreadPool(size_t num_threads);
    // 析构函数：确保所有线程都正确停止
    ~ThreadPool();
    // 提交任务
    void enqueue(Task* task);
};
